/**
 * Created by PanJiaChen on 16/11/18.
 */

/**
 * @param {string} path
 * @returns {Boolean}
 */
export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path)
}

/**
 * @param {string} str
 * @returns {Boolean}
 */
export function validUsername(str) {
  const valid_map = ['admin', 'editor']
  return valid_map.indexOf(str.trim()) >= 0
}

/**
 * 名称
 * 只支持正整数
 * @param {Number} num
 * @returns {String}
 */
export function positiveInteger(num) {
  if (!num) {
    num = 8
  }
  return "value=value.replace(/[^0-9]/g,'').slice(0," + num + ')'
  // value=value.replace(/\D|^[0]+/g,'').slice(0,8) //废弃正则
}

/**
 * 用户名正则校验:正整数包含0
 * @param {string} str
 * @returns {Boolean}
 */
export function checkSort(str) {
  // const reg = /[^0-9]/g
  const reg = /^[0-9]*[1-9][0-9]*$/
  return reg.test(str)
}

/**
 * 用户名正则校验:用户名长度1-20字母、数字组成（不区分大小写）
 * @param {string} str
 * @returns {Boolean}
 */
export function checkUserName(str) {
  // 1-20位 大小写字母或数字
  // const reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/
  const reg = /^[A-Za-z0-9]{1,20}$/
  return reg.test(str)
}

/**
 * 正则校验: 必须包含字母（长度1-10）
 * @param {string} str
 * @returns {Boolean}
 */
export function checkLetter(str) {
  // 1-10位 大小写字母
  const reg = /^[A-Za-z][A-Za-z0-9]{1,10}$/
  return reg.test(str)
}

/**
 * 密码正则校验:密码为6-20位，不允许出现空字符
 * @param {string} str
 * @returns {Boolean}
 */
export function checkPwd(str) {
  // const reg = /^[^ ]{6,20}$/
  // const reg = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[A-Za-z0-9]{8,20}$/ // 8-20位 大小写字母和数字
  var reg = /(?=.*[a-z_])(?=.*\d)(?=.*[^a-z0-9_])[\S]{8,20}/i	// 密码长度为8-20位，其中包含：数字、字母（区分大小写）、特殊字符
  return reg.test(str)
}

/**
 * 手机号码验证(11位数字)
 * @param {string} str
 * @returns {Boolean}
 */
export function checkPhone(str) {
  // const reg = /^([1][\d]{10})$/
  const reg = /^1(3[0-9]|4[01456879]|5[0-35-9]|6[2567]|7[0-8]|8[0-9]|9[0-35-9])\d{8}$/
  return reg.test(str)
}

/**
 * 邮箱正则校验
 * @param {string} str
 * @returns {Boolean}
 */
export function checkEmail(str) {
  // const reg = /^[a-zA-Z0-9]+[a-zA-Z0-9._-]+@([a-zA-Z0-9]+[a-zA-Z0-9_-]+\.)+[a-z]{2,}$/
  // const reg = /^[a-z0-9A-Z]+[-|a-z0-9A-Z._]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\.)+[a-z]{2,}$/
  const reg = /\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*/
  // const reg = email.matches('^[a-z0-9A-Z]+[-|a-z0-9A-Z._]+@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-z]{2,}$')

  return reg.test(str)
}

/**
 * 姓名
 *
 * @param {string} str
 * @returns {Boolean}
 */
export function checkAccountName(str) {
  // const reg = /^[a-zA-Z\u4e00-\u9fa5]{0,20}$/ // 支持中文、英文限制0-20位
  const reg = /^[A-Za-z0-9\u4e00-\u9fa5]{0,20}$/ // 汉字、大小写字母、数字 0-20
  return reg.test(str)
}
export function checkRealName(str) {
  // const reg = /^[a-zA-Z\u4e00-\u9fa5]{0,20}$/ // 支持中文、英文限制0-20位
  const reg = /^[A-Za-z0-9\u4e00-\u9fa5]{0,50}$/ // 汉字、大小写字母、数字 0-20
  return reg.test(str)
}
/**
 * 名称
 * 6-20位，仅限英文、数字和下划线
 * @param {string} str
 * @returns {Boolean}
 */
export function checkAccount(str) {
  const reg = /^[0-9_a-zA-Z]{6,20}$/
  return reg.test(str)
}

/**
 * 名称
 * 支持_、英文限制1-40位
 * @param {string} str
 * @returns {Boolean}
 */
export function checkProductFlag(str) {
  const reg = /^[a-zA-Z_]{1,40}$/
  return reg.test(str)
}
/**
 * 判断是否为空
 */
export function validatenull(val) {
  if (typeof val === 'boolean') {
    return false
  }
  if (val instanceof Array) {
    if (val.length === 0) return true
  } else if (val instanceof Object) {
    if (JSON.stringify(val) === '{}') return true
  } else {
    if (val === 'null' || val == null || val === 'undefined' || val === undefined || val === '') return true
    return false
  }
  return false
}

/**
 * 数字
 * 0-9的数字
 * @param {string} str
 * @returns {Boolean}
 */
export function checkNumber(str) {
  const reg = /^[0-9]*$/
  return reg.test(str)
}
/**
 * 社会信用代码
 * 统一代码为18位，统一代码由十八位的数字或大写英文字母（不适用I、O、Z、S、V）组成
 * @param {string} str
 * @returns {Boolean}
 */
export function checkSocialCode(str) {
  const reg = /[0-9A-HJ-NPQRTUWXY]{2}\d{6}[0-9A-HJ-NPQRTUWXY]{10}/
  return reg.test(str)
}

/**
 * 输入字符：汉字、数字、大小写字母、下划线
 * @param {string} str
 * @returns {Boolean}
 */
export function checkChar(str) {
  const reg = /^[\u4E00-\u9FA5A-Za-z0-9_]+$/
  return reg.test(str)
}

/**
 * 输入编码：数字、大小写字母、下划线
 * @param {string} str
 * @returns {Boolean}
 */
export function checkCode(str) {
  const reg = /^[0-9a-zA-Z_]{1,}$/
  return reg.test(str)
}

/**
 * 包名
 * 格式必须为英文字母开头、字母和“.”
 * @param {string} str
 * @returns {Boolean}
 */
export function packageName(str) {
  const reg = /(^(?:[a-z_]+(?:\d*[a-zA-Z_]*)*)(?:\.[a-z_]+(?:\d*[a-zA-Z_]*)*)*$)/
  return reg.test(str)
}

/**
 * 不可以输入中文字符
 * @param {string} str
 * @returns {Boolean}
 */
export function noChinese(str) {
  const reg = /[\u4e00-\u9fa5]/
  return reg.test(str)
}

/**
 * 大小写字母
 * @param {string} str
 * @returns {Boolean}
 */
export function charCharacter(str) {
  const reg = /^[A-Za-z]+$/
  return reg.test(str)
}

/**
 * 输入参数值:字母、数字、划线-、下划线_、@、英文句号.
 * @param {string} str
 * @returns {Boolean}
 */
export function charParameterValue(str) {
  const reg = /^[\u4E00-\u9FA5A-Za-z0-9_@.%]+$/
  return reg.test(str)
}
/**
 * 参数名称校验:字母、数字组成（不区分大小写）
 * @param {string} str
 * @returns {Boolean}
 */
export function checkParameterName(str) {
  // 大小写字母或数字
  // const reg = /^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{6,10}$/
  const reg = /^[A-Za-z0-9]+$/
  return reg.test(str)
}

/**
 * 身份证号
 * @param {string} str
 * @returns {Boolean}
 */
export function checkIdCard(str) {
  const reg = /^(([1][1-5])|([2][1-3])|([3][1-7])|([4][1-6])|([5][0-4])|([6][1-5])|([7][1])|([8][1-2]))\d{4}(([1][9]\d{2})|([2]\d{3}))(([0][1-9])|([1][0-2]))(([0][1-9])|([1-2][0-9])|([3][0-1]))\d{3}[0-9xX]$/
  return reg.test(str)
}

/**
 * 特殊字符
 * @param {string} str
 * @returns {Boolean}
 */
export function checkSpecialStr(str) {
  const reg = /^[^#@%&*¥$*]+$/
  return reg.test(str)
}

/**
 * topic：数字、大小写字母、下划线、中划线
 * @param {string} str
 * @returns {Boolean}
 */
export function checkTopic(str) {
  const reg = /^[0-9a-zA-Z_-]{1,}$/
  return reg.test(str)
}

/**
 * 名称
 * 1-32位，仅限英文、数字和下划线
 * @param {string} str
 * @returns {Boolean}
 */
export function checkAppSecret(str) {
  const reg = /^[0-9_a-zA-Z]{1,32}$/
  return reg.test(str)
}

/**
 * 输入字符：汉字、数字、大小写字母、下划线、划线
 * @param {string} str
 * @returns {Boolean}
 */
export function checkCharString(str) {
  const reg = /^[\u4E00-\u9FA5A-Za-z0-9_-]+$/
  return reg.test(str)
}

/**
 * 输入字符：汉字、数字、大小写字母、下划线、中划线、中英文括号、特殊字符
 * @param {string} str
 * @returns {Boolean}
 */
export function checkName(str) {
  const reg = /^[\u4E00-\u9FA5()（）^#@%&*¥$*A-Za-z0-9_-]+$/
  return reg.test(str)
}

/**
 * 校验链接地址格式是否正确
 * @param {string} str
 * @returns {Boolean}
 */
export function checkURL(str) {
  const reg = /^((http|https):\/\/)/;
  return reg.test(str)
}
